package com.lframework.jh.push.service.service;

import com.lframework.jh.push.core.components.resp.PageResult;
import com.lframework.jh.push.core.service.BaseMpService;
import com.lframework.jh.push.service.dto.UserInfoDto;
import com.lframework.jh.push.service.entity.SysUser;
import com.lframework.jh.push.service.vo.user.CreateSysUserVo;
import com.lframework.jh.push.service.vo.user.QuerySysUserVo;
import com.lframework.jh.push.service.vo.user.SysUserSelectorVo;
import com.lframework.jh.push.service.vo.user.UpdateSysUserVo;

import java.util.List;

public interface SysUserService extends BaseMpService<SysUser> {

    /**
     * 查询列表
     *
     * @param pageIndex
     * @param pageSize
     * @param vo
     * @return
     */
    PageResult<SysUser> query(Integer pageIndex, Integer pageSize, QuerySysUserVo vo);

    /**
     * 查询列表
     *
     * @param vo
     * @return
     */
    List<SysUser> query(QuerySysUserVo vo);

    /**
     * 根据ID查询
     *
     * @param id
     * @return
     */
    SysUser findById(String id);

    /**
     * 批量启用
     *
     * @param ids
     */
    void batchEnable(List<String> ids);

    /**
     * 批量停用
     *
     * @param ids
     */
    void batchUnable(List<String> ids);

    /**
     * 创建
     *
     * @param vo
     * @return
     */
    String create(CreateSysUserVo vo);

    /**
     * 修改
     *
     * @param vo
     */
    void update(UpdateSysUserVo vo);

    /**
     * 选择器
     *
     * @param pageIndex
     * @param pageSize
     * @param vo
     * @return
     */
    PageResult<SysUser> selector(Integer pageIndex, Integer pageSize, SysUserSelectorVo vo);

    /**
     * 获取用户信息
     *
     * @param userId 用户ID
     * @return
     */
    UserInfoDto getInfo(String userId);

    /**
     * 修改用户密码
     *
     * @param userId   用户ID
     * @param password 新密码（明文）
     */
    void updatePassword(String userId, String password);

    /**
     * 修改邮箱
     *
     * @param userId 用户ID
     * @param email  邮箱
     */
    void updateEmail(String userId, String email);

    /**
     * 修改联系电话
     *
     * @param userId    用户ID
     * @param telephone 联系电话
     */
    void updateTelephone(String userId, String telephone);

    /**
     * 根据ID锁定
     *
     * @param id
     */
    void lockById(String id);

    /**
     * 根据ID解锁
     *
     * @param id
     */
    void unlockById(String id);
}
